/**
 * 
 */
package com.an.threadtest.juc;

import java.util.concurrent.Callable;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.FutureTask;

/**
 * @author Administrator 提前完成任务
 */
public class CallableFuture {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// 创建callable对象
		MyThread callable = new MyThread();
		// 使用FutureTask装callable
		FutureTask<Integer> task = new FutureTask<Integer>(callable);
		// 启动线程，其实还是启动的callable，这是callable作为载体传入了线程对象
		new Thread(task, "有返回值的线程").start();
		try {
			// 获取线程的返回值
			System.out.println("wozai我在做其他事情");
			System.out.println("线程的返回值:" + task.get());
			System.out.println("wozai我在做其他事情");

		} catch (InterruptedException e) {
			e.printStackTrace();
		} catch (ExecutionException e) {
			e.printStackTrace();
		}

	}

}

class MyThread implements Callable<Integer> {

	/*
	 * shixian实现call方法作为线程的代码，这里线程可以有返回值
	 * 
	 * @see java.util.concurrent.Callable#call()
	 */
	@Override
	public Integer call() throws Exception {
		Thread.sleep(10000);
		return 1;
	}

}
